(基本的)対話型ハンドシェイクパターン - Noise Protocol Framework (7)
(一方向ではない)対話的なハンドシェイクパターンではパターンを2文字の名称で表します。
1文字目がイニシエーターの静的公開鍵のステータス、2文字目がレスポンダーの静的公開鍵のステータスです。
1文字目には以下のようなものがあります。
N = イニシエーターの静的公開鍵は相手に通知されません。
K = イニシエーターの静的公開鍵はレスポンダーに事前に知られています。(プレメッセージパターンによって)
X = イニシエーターの静的公開鍵はレスポンダーに送信されます。(通常のメッセージパターンによって)
I = イニシエーターの静的公開鍵はレスポンダーに送信されますが、アイデンティティの秘匿化は行われないか弱くなっています。
2文字目の意味も同様ですが、"I"がないことに注意してください。
N = レスポンダーの静的公開鍵は相手に通知されません。
K = レスポンダーの静的公開鍵はイニシエーターに事前に知られています。(プレメッセージパターンによって)
X = レスポンダーの静的公開鍵はイニシエーターに送信されます。(通常のメッセージパターンによって)
基本的な対話的ハンドシェイクパターンは以下の12通りです。
NN:
-> e
<- e, ee
NK:
<- s
...
-> e, es
<- e, ee
NX:
-> e
<- e, ee, s, es
XN:
-> e
<- e, ee
-> s, se
XK:
<- s
...
-> e, es
<- e, ee
-> s, se
XX:
-> e
<- e, ee, s, es
-> s, se
KN:
-> s
...
-> e
<- e, ee, se
KK:
-> s
<- s
...
-> e, es, ss
<- e, ee, se
KX:
-> s
...
-> e
<- e, ee, se, s, es
IN:
-> e, s
<- e, ee, se
IK:
<- s
...
-> e, es, s, ss
<- e, ee, se
IX:
-> e, s
<- e, ee, se, s, es
XXパターンは、相互の認証と静的公開鍵の送信をサポートするため、一般的には最も有用とされています。ただ、ハンドシェイク完了までに3回のメッセージ送受信が必要なため、メッセージ送受信の回数の少ない(2回)IKや IXなどのパターンが選択されているケースもあります(下記の例を参照)
例
Lightning Network : XK(3メッセージ)
WireGuard: IK(2メッセージ)
Libra: IX(2メッセージ)